// Autor: Lynn Liebert
// Diese Klasse enthaelt alle Komponenten, die im Menu des Spiels benutzt werden, dazu gehoeren:
// Panels, Labels, Buttons, Checkboxes, Textfelder
// ... sowie ihre Eigenschaften:
// Groesse; Lage; Farbe; Sichtbarkeit; ob Mouse-/Actionlistener hinzugefügt werden;
// Die Komponenten der Speicher- und Ladefunktion sind noch nicht voll in Benutzung. 


package view;
import interfaces.ICalculate;

import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.*;


public class Startmenu extends javax.swing.JPanel {
	
	

	// Panels
    public JPanel nSpielPan;
	public JPanel nSpielPanTxt;
	public JPanel nSpielPanNam;
	public JPanel LoadGamePan;
	
	// Labels(Buttons) im Hauptmenu
	public JLabel nSpiel;
	public JLabel sSpiel;
	public JLabel lSpiel;
	public JLabel bSpiel;
	
	
	// Textfelder zur Namenseingabe
	public JTextField name1txt = new JTextField();
	public JTextField name2txt = new JTextField();
	public JTextField name3txt = new JTextField();
	public JTextField name4txt = new JTextField();
	
	// Labels "Spieler x"
	public JLabel name1lab = new JLabel();
	public JLabel name2lab = new JLabel();
	public JLabel name3lab = new JLabel();
	public JLabel name4lab = new JLabel();
	
	// Farbicons
	public JLabel lab_blue = new JLabel();
	public JLabel lab_red = new JLabel();
	public JLabel lab_green = new JLabel();
	public JLabel lab_yellow = new JLabel();
	
	// Labels zur Anzeige der Spielernamen
	public JLabel spieler1lab = new JLabel();
	public JLabel spieler2lab = new JLabel();
	public JLabel spieler3lab = new JLabel();
	public JLabel spieler4lab = new JLabel();

	
	// Checkboxen zur KI-Abfrage
	public JCheckBox KIcheck1 = new JCheckBox();
	public JCheckBox KIcheck2 = new JCheckBox();
	public JCheckBox KIcheck3 = new JCheckBox();
	public JCheckBox KIcheck4 = new JCheckBox();
	
	// Label "KI?"
	public JLabel ki = new JLabel();
	
	// Liste der Savedgames
	public JList LoadList = new JList();
	
	// Buttons des LoadPanels
	public JButton Load = new JButton();
	public JButton lBack = new JButton();
	
	// Label: "Gespeichert."
	public JLabel lSave = new JLabel(); 
	
	// Label "Zu wenig Spieler"
	public JLabel morePlayer = new JLabel();
	
	// Fenstergröße
	private Dimension WindowSize;
	
	// Button zur Bestätigung der Spielernamen
	public JButton spielerBestaet = new JButton();
	
	// Button "Zurueck"
	public JButton back = new JButton();
	
	//Interface
	private ICalculate logic;
	

	
	public Startmenu(ICalculate logic, Dimension WindowSize) {
		super();
		this.logic = logic;
		this.WindowSize = WindowSize; //Übergabe der maximalen Fenstergrösse
		initGUI();
		
	}
	
	private void initGUI() {
		try {
			setLayout(null);
			
			setBounds(0, 0, (int)WindowSize.getHeight(), (int)WindowSize.getWidth());
			
			{
							
				//**************************************************************************
				//-----------Anzeige bei Menuaufruf -----------
				int labelwidth = 200;
				int firstheight = 200;
				
				
				// Labels (Buttons) im Hauptmenu
				this.nSpiel = new JLabel(" Neues Spiel");
				nSpiel.setFont(nSpiel.getFont().deriveFont(15f));		
				nSpiel.setBounds((getWidth()-labelwidth)/2, firstheight, labelwidth-50, 30);
				nSpiel.addMouseListener((MouseListener) logic.getAction().getMenuAction(this));

				this.sSpiel = new JLabel(" Spiel speichern");
				sSpiel.setFont(sSpiel.getFont().deriveFont(15f));		
				sSpiel.setBounds((getWidth()-labelwidth)/2, firstheight+50, labelwidth-50, 30);
				sSpiel.addMouseListener((MouseListener) logic.getAction().getMenuAction(null));
				
				this.lSpiel = new JLabel(" Spiel laden");
				lSpiel.setFont(lSpiel.getFont().deriveFont(15f));		
				lSpiel.setBounds((getWidth()-labelwidth)/2, firstheight+50*2, labelwidth-50, 30);
				lSpiel.addMouseListener((MouseListener) logic.getAction().getMenuAction(null));
				
				this.bSpiel = new JLabel(" Spiel beenden");
				bSpiel.setFont(bSpiel.getFont().deriveFont(15f));		
				bSpiel.setBounds((getWidth()-labelwidth)/2, firstheight+50*3, labelwidth-50, 30);
				bSpiel.addMouseListener((MouseListener) logic.getAction().getMenuAction(null));
				
								
							
				add(nSpiel);
				add(sSpiel);
				add(lSpiel);
				add(bSpiel);
				
				//**************************************************************************
				//---- Panel nSpielPanTxt: Erzeugung ----
				nSpielPanTxt = new JPanel();
				nSpielPanTxt.setLayout(null);
				nSpielPanTxt.setBounds(0, 0, (int)WindowSize.getHeight(), (int)WindowSize.getWidth());
				nSpielPanTxt.setEnabled(false);
				nSpielPanTxt.setVisible(false);
				nSpielPanTxt.setBackground(Color.GRAY);
				add(nSpielPanTxt);
				
				
				//*************************************************************************
				//---- Textfelder in nSpielPanTxt, Namenseingabe ----
				
				
				nSpielPanTxt.add(name1txt);
				nSpielPanTxt.add(name2txt);
				nSpielPanTxt.add(name3txt);
				nSpielPanTxt.add(name4txt);
				
				
				name1txt.setMaximumSize(getSize());
				name1txt.setBounds(0, 30, 100, 20);
				name1txt.setVisible(false);
				
				name2txt.setMaximumSize(getSize());
				name2txt.setBounds(0, 80, 100, 20);
				name2txt.setVisible(false);
				
				name3txt.setMaximumSize(getSize());
				name3txt.setBounds(0, 130, 100, 20);
				name3txt.setVisible(false);
				
				name4txt.setMaximumSize(getSize());
				name4txt.setBounds(0, 180, 100, 20);
				name4txt.setVisible(false);
				
				//**************************************************************************
				//---- Eigenschaften der Checkboxen zur KI-Abfrage ----
				
				KIcheck1.setBounds(110, 30, 20, 20);
				KIcheck2.setBounds(110, 80, 20, 20);
				KIcheck3.setBounds(110, 130, 20, 20);
				KIcheck4.setBounds(110, 180, 20, 20);
				
				KIcheck1.setBackground(Color.gray);
				KIcheck2.setBackground(Color.gray);
				KIcheck3.setBackground(Color.gray);
				KIcheck4.setBackground(Color.gray);
				
				KIcheck1.setVisible(false);
				KIcheck2.setVisible(false);
				KIcheck3.setVisible(false);
				KIcheck4.setVisible(false);
				
				nSpielPanTxt.add(KIcheck1);
				nSpielPanTxt.add(KIcheck2);
				nSpielPanTxt.add(KIcheck3);
				nSpielPanTxt.add(KIcheck4);
				
				// Label "KI?"
				
				ki.setBounds(112, 8, 30, 30);
				ki.setText("KI?");
				nSpielPanTxt.add(ki);
				ki.setVisible(false);
				//**************************************************************************
				//---- Eigenschaften der Labels "Spieler x" ----
							
				
				nSpielPanTxt.add(name1lab);
				nSpielPanTxt.add(name2lab);
				nSpielPanTxt.add(name3lab);
				nSpielPanTxt.add(name4lab);
				
				name1lab.setText("Spieler 1");
				name1lab.setBounds(0, 5, 100, 20);
				name1lab.setVisible(false);
				
				name2lab.setText("Spieler 2");
				name2lab.setBounds(0, 55, 100, 20);
				name2lab.setVisible(false);
				
				name3lab.setText("Spieler 3");
				name3lab.setBounds(0, 105, 100, 20);
				name3lab.setVisible(false);
				
				name4lab.setBounds(0, 155, 100, 20);
				name4lab.setText("Spieler 4");
				name4lab.setVisible(false);
				
				
				//**************************************************************************
				//---- Erzeugung der Farb-Icons ----
				
				
				//----Blau-----
				lab_blue.setBounds(60, 156, 15, 15);
				lab_blue.setBackground(Color.blue);
				lab_blue.setOpaque(true);
				lab_blue.setVisible(false);
				

				//----Grün-----
				lab_green.setBounds(60, 56, 15, 15);
				lab_green.setBackground(Color.green);
				lab_green.setOpaque(true);
				lab_green.setVisible(false);
				

				//----Rot-----
				lab_red.setBounds(60, 6, 15, 15);
				lab_red.setBackground(Color.red);
				lab_red.setOpaque(true);
				lab_red.setVisible(false);

				//----Gelb-----
				lab_yellow.setBounds(60, 106, 15, 15);
				lab_yellow.setBackground(Color.yellow);
				lab_yellow.setOpaque(true);
				lab_yellow.setVisible(false);
				
				
				nSpielPanTxt.add(lab_blue);
				nSpielPanTxt.add(lab_red);
				nSpielPanTxt.add(lab_green);
				nSpielPanTxt.add(lab_yellow);
				

				//***************************************************************************
				//***************************************************************************
				//---- Eigenschaften spielerBestaet-Button ----

				nSpielPanTxt.add(spielerBestaet);
				spielerBestaet.setBounds(130, 160, 70, 50);
				spielerBestaet.setText("GO!");
				spielerBestaet.addActionListener(this.logic.getAction().getMenuAction(null));
				
				// ---- Eigenschaften Button "Zurück"
				
				nSpielPanTxt.add(back);
				back.setBounds(210, 160, 90, 50);
				back.setText("Zurueck");
				back.addActionListener(this.logic.getAction().getMenuAction(null));
				
				// ---- Eigenschaften Label "Zu wenig Spieler"
				
				nSpielPanTxt.add(morePlayer);
				morePlayer.setBounds(130, 220, 350, 50);
				morePlayer.setText("Zu wenig Spieler, mind. 2 Spieler (KI) erforderlich!");
				morePlayer.setVisible(false);
				

				//**************************************************************************
				//---- Erzeugung nSpielPanNam ----
				
				nSpielPanNam = new JPanel();
				add(nSpielPanNam);
				nSpielPanNam.setLayout(null);
				nSpielPanNam.setBounds(0, 0, (int)WindowSize.getHeight(), (int)WindowSize.getWidth());
				nSpielPanNam.setEnabled(false);
				nSpielPanNam.setVisible(false);
				nSpielPanNam.setBackground(Color.GRAY);
				
				//*************************************************************************
				// - Spieleranzeige positionieren - 
				
				spieler1lab.setBounds(80, 5, 100, 20);
				spieler2lab.setBounds(80, 55, 100, 20);
				spieler3lab.setBounds(80, 105, 100, 20);
				spieler4lab.setBounds(80, 155, 100, 20);
				
				//**************************************************************************
				//---- Spielerlabels in nSpielPanNam anzeigen
				
				nSpielPanNam.add(spieler1lab);
				nSpielPanNam.add(spieler2lab);
				nSpielPanNam.add(spieler3lab);
				nSpielPanNam.add(spieler4lab);
				
				
				
				

					

				//**************************************************************
				// ---- Panel: LoadGame
				//**************************************************************		
				// noch nicht in Benutzung, AusbaufÃ¤hig
				LoadGamePan = new JPanel();
				add(LoadGamePan);
				LoadGamePan.setLayout(null);
				LoadGamePan.setBounds(0, 0, (int)WindowSize.getHeight(), (int)WindowSize.getWidth());
				LoadGamePan.setEnabled(false);
				LoadGamePan.setVisible(false);
				LoadGamePan.setBackground(Color.GRAY);

				
				// Liste der Savedgames
				
				LoadList.setBounds(10, 10, 300, 500);
				LoadList.setVisible(true);
				
				// Buttons des LoadPanels
				
				Load.setBounds(320, 450, 50, 50);
				Load.setText("Lade!");
				Load.setVisible(true);
				
				lBack.setBounds(380, 450, 50, 50);
				lBack.setVisible(true);
							
				
				//**************************************************************
				// ---- Label für Speicherungsbestätigung
				//**************************************************************
				
				add(lSave);
				lSave.setBounds(((getWidth()-labelwidth)/2)+150, firstheight+50, labelwidth, 30);
				lSave.setText("Gespeichert.");
				lSave.setVisible(false);
				lSave.setForeground(Color.red); //Schriftfarbe: Rot
				

				// Liste der Savedgames
				
				LoadList.setBounds(10, 10, 300, 500);
				LoadList.setVisible(true);
				
				// Buttons des LoadPanels
				
				Load.setBounds(320, 450, 50, 50);
				Load.setText("Lade!");
				Load.setVisible(true);
				
				lBack.setBounds(380, 450, 50, 50);
				lBack.setVisible(true);
							
				
				
			
//*************************************************************************
//*************************************************************************
//*************************************************************************
				
			
			}
			
			
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	


}
